package cn.ai.shoes.client.service.impl;

import jakarta.websocket.*;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

// 定义WebSocket客户端端点
@ClientEndpoint
public class WebSocketClientExample {
    private Session session;

    // 连接打开时触发
    @OnOpen
    public void onOpen(Session session) {
        this.session = session;
        System.out.println("WebSocket连接已建立");
    }

    // 收到消息时触发
    @OnMessage
    public void onMessage(String message) {
        System.out.println("收到消息: " + message);
        // 在这里处理不同类型的消息
        handleMessage(message);
    }

    // 连接关闭时触发
    @OnClose
    public void onClose(Session session, CloseReason closeReason) {
        System.out.println("WebSocket连接已关闭: " + closeReason);
    }

    // 发生错误时触发
    @OnError
    public void onError(Throwable throwable) {
        System.out.println("WebSocket错误: " + throwable.getMessage());
        throwable.printStackTrace();
    }

    // 处理接收到的消息
    private void handleMessage(String message) {
        try {
            // 这里可以添加JSON解析逻辑
            // 例如使用Jackson、Gson等库解析消息内容
            if (message.contains("\"type\": \"status\"")) {
                System.out.println("处理状态消息...");
                // 解析状态消息
            } else if (message.contains("\"type\": \"crystools.monitor\"")) {
                System.out.println("处理监控消息...");
                // 解析监控消息
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 发送消息
    public void sendMessage(String message) {
        try {
            if (session != null && session.isOpen()) {
                session.getBasicRemote().sendText(message);
                System.out.println("发送消息: " + message);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 关闭连接
    public void close() {
        try {
            if (session != null && session.isOpen()) {
                session.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 主方法示例
    public static void main(String[] args) {
        try {
            // 创建WebSocket连接
            WebSocketContainer container = ContainerProvider.getWebSocketContainer();
            String uri = "wss://x2g073qao0c43jnu-80.container.x-gpu.com/ws";
            WebSocketClientExample client = new WebSocketClientExample();

            // 建立连接
            container.connectToServer(client, new URI(uri));

            // 保持程序运行
            Thread.sleep(60000); // 运行60秒

            // 关闭连接
            client.close();

        } catch (DeploymentException | IOException | URISyntaxException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}
